package com.zhongge.binarytreeOJ.question;
import com.zhongge.binarytreeOJ.MyBinaryTree.TreeNode;
/**
 * @ClassName IsSame
 * @Description TODO
 * @Author zhongge
 * @Date 2025/9/3 16:40
 * @Version 1.0
 */
public class IsSame {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        //第一步：安全校验
        if (p == null && q == null) {
            return true;
        }
        //到这里：p!=null || q!=null
        if (p == null) {//p == null&&q!=null
            return false;
        }

        if (q == null) {//q == null&&p != null
            return false;
        }
        //到这里 p!=null && q!=null
        //那么此时就看结构：由左右子树的情况
        if (p.left != null && q.left == null ||
                p.left == null && q.left != null) {
            return false;
        } else if(p.right != null && q.right == null ||
                p.right == null && q.right != null) {
            return false;
        } else {
            //到这里说明 p.left != null && q.left != null
            // p.right != null && q.right != null
            //结构相同那么就比较左右子树的值
            if (p.val != q.val) {
                return false;
            } else {//值相同
                //那么此时就比较左右子树是否相同
                return  (isSameTree(p.left, q.left) && isSameTree(p.right, q.right));
            }
        }
    }
}
